var loading_icon = "<img class=\"loading_icon\" src=\"image/loading_icon.gif\" />";

var current_open_group = -1;

// 読み込みが終わってから呼ばれる関数
function featurePageLoaded(page) {
	switch (page) {
		case 'group.tab':
			if ($("#group_list .current")) {
				group_id = $("#group_list .current").siblings("input:hidden").val();
				
				current_open_group = group_id;
			}
			else {
				disableFunctionsTab();
			}
			break;
		default:
			break;
	}
}

// 使用しているグループの変更
function groupChange(group_id) {
	if (group_id != current_open_group) {
		$(".groupLoadingBox").html(loading_icon);
		
		current_open_group = group_id;
		
		$("#group_list li a").removeClass("current");
		
		$(":hidden[name=group_id]").each(function() {
			if ($(this).val() == group_id)
				element = $("a", $(this).parent());
		});
		$(element).addClass("current");
		
		data = "request_page=view_group_menu&group_id=" + group_id;
		
		$.ajax({
			type: "GET",
			url: "ajax.php",
			data: data,
			success: function (result) {
				$(".groupMain").html(result);
				$(".group").show();
				$(".groupLoadingBox").html("");
				
				enableFunctionsTab();
			}
		});
	}
}

// グループの作成
function createGroup() {
	if (window.confirm("グループを作成します。よろしいですか？")) {
		
		groupName = $("#group_name").val();
		$('#group_name').attr("readonly", "readonly");
		
		data = "post_data=true&action=create_group&name=" + encodeURI(groupName);
		address = "ajax.php";
		$("#groupCreateLoading").show();
		
		$.ajax({
			type: "POST",
			url: address,
			data: data,
			success: function (result) {
				if (result == "success") {
					groupName = $("#group_name").val();
					enableFunctionsTab();
					loadPage('グループ編集', groupName);
				}
				else {
					showError("グループ作成に失敗しました。<p>メッセージ： " + result + "</p>");
					$('#group_name').removeAttr("readonly");
				}
				
				$("#groupCreateLoading").hide();
			}
		});
	}
}

// ツイッターのリストを作成する
function createTwitterList() {
	var groupViewContent = $("#group_view").html();
	
	loading = true;
	$(".groupLoadingBox").html(loading_icon);
	
	data = "post_data=true&action=twitter_list_create";
	
	$.ajax ({
		type: "POST",
		url: "ajax.php",
		data: data,
		success: function (result) {
			pos = result.indexOf("|");
			
			if (pos) {
				res = result.substr(0, pos);
				
				// リスト作成に成功した場合
				if (res == "success") {
					msg = result.substr(pos + 1);
						
	
					showMessage(msg);
				}
				// リスト作成に失敗した場合
				else if (res == "error") {
					errorMsg = result.substr(pos + 1);
					
					showError(errorMsg);
				}
			}
			else {				
				showError(result);
			}
			
			loading = false;
			$(".groupLoadingBox").html("");
		}
	});
}

// メンバーをソートできるダイアログの表示、またその保存
function sortMembers() {
	data = "request_page=sort_members";
	
	loading = true;
	$(".groupLoadingBox").html(loading_icon);
	
	$.ajax ({
		type: "GET",
		url: "ajax.php",
		data: data,
		success: function (result) {
			pos = result.indexOf("|");
			
			if (pos) {
				title = result.substr(0, pos);
				contents = result.substr(pos + 1);
				
				$("#dialog").html(contents);
				
				$( "#member_sort" ).sortable({
					containment: '#dialog',
					axis: 'y',
					scroll: false,
					// 行番号の修正
					// http://forum.jquery.com/topic/sortable-ol-elements-don-t-display-numbers-properly
					sort: function() {
						var $lis = $(this).children('li');
						$lis.each(function(){
							var $li = $(this);
							var hindex = $lis.filter('.ui-sortable-helper').index();
							if( !$li.is('.ui-sortable-helper') ){
								var index = $li.index();
								index = index < hindex ? index + 1 : index;

								$li.val(index);

								if( $li.is('.ui-sortable-placeholder') ){
									$lis.filter('.ui-sortable-helper').val(index);
								}
							}
						});
					}
				});
				$( "#member_sort" ).disableSelection();
				
				$("#dialog").dialog({
					autoOpen: true,
					title: title,
					height: 500,
					width: 400,
					modal: true,
					resizable: false,
					buttons: {
						"キャンセル": function() {
							$( this ).dialog( "close" );
						},
						"並び順を保存": function() {
							sort_order = "";
							
							$("#sort_loading").html(loading_icon);
							
							$("#member_sort li").each(function(i) {
								name = $.trim($(":hidden", this).val());
								order = i;
								
								sort_order += "member[" + i + "]" + "=";
								sort_order += name + "&";
							});
							
							sort_order = sort_order.slice(0, -1);
							
							data = "post_data=true&action=member_sort&";
							data+= sort_order;
														
							$.ajax ({
								type: "POST",
								url: "ajax.php",
								data: data,
								success: function (result) {
									$("#sort_loading").html("");
									$( "#dialog" ).dialog( "close" );
									pos = result.indexOf("|");
									
									if (pos) {
										res = result.substr(0, pos);
										
										if (res == "success") {
											msg = result.substr(pos + 1);			
											
											showMessage(msg);
											
											loading = true;
											$(".groupLoadingBox").html(loading_icon);
											
											data = "request_page=view_group_menu&group_id=" + current_open_group;
											
											$.ajax({
												type: "GET",
												url: "ajax.php",
												data: data,
												success: function (result) {
													loading = false;
													$(".groupLoadingBox").html("");
													$(".groupMain").html(result);
													$(".group").show();
												}
											});
										}
										else if (res == "error") {
											errorMsg = result.substr(pos + 1);
											
											showError(errorMsg);
										}
									}
									else {
										showError(result);
									}
								}
							});
						}
					}
				});
			} else {
				showError(result);
			}
			
			loading = false;
			$(".groupLoadingBox").html("");
		}
	});
	
	return false;
}

// グループを削除する （ダイアログ表示 => 最終確認 => 削除を実行）
function deleteGroup() {
	data = "request_page=delete_group";
	
	$(".groupLoadingBox").html(loading_icon);
	
	$.ajax ({
		type: "GET",
		url: "ajax.php",
		data: data,
		success: function (result) {
			pos = result.indexOf("|");
			
			if (pos) {
				title = result.substr(0, pos);
				contents = result.substr(pos + 1);
				
				$("#dialog").html(contents);
								
				$("#dialog").dialog({
					autoOpen: true,
					title: title,
					height: 250,
					width: 350,
					modal: true,
					resizable: false,
					buttons: {
						"キャンセル": function() {
							$( this ).dialog( "close" );
						},
						"削除": function() {
							if (confirm("本当にグループを削除してよろしいですか？")) {
								
								$(".groupLoadingBox").html(loading_icon);
								$( "#dialog" ).dialog( "close" );
							
								$(".group").hide();
								disableFunctionsTab();
								
								data = "post_data=true&action=group_delete&"
								data+= "group=" + current_open_group;
									
								$.ajax ({
									type: "POST",
									url: "ajax.php",
									data: data,
									success: function (result) {
										pos = result.indexOf("|");
				
										if (pos) {
											state = result.substr(0, pos);
											message = result.substr(pos + 1);
											
											// グループリストで非表示にする
											$current = $("#group_list .current");
											$current.removeClass("current");
											$current.parent().hide();
											
											current_open_group = -1;
											
											showMessage(message);
										}
										else {
											showError(result);
										}
										
										$(".groupLoadingBox").html("");
									}
								});
							}
						}
					}
				});
			} else {
				showError(result);
			}
			
			$(".groupLoadingBox").html("");
		}
	});
	
	return false;
}

// ツイッターでフォローしているユーザー、またフォローされているユーザーからグループメンバーを追加
function addFromFriends(type) {
	if (type == "friends") {
		data = "request_page=show_friends";
	} else if (type == "followers") {
		data = "request_page=show_followers";
	}
	
	$("#groupEditLoading").show();
	
	$.ajax ({
		type: "GET",
		url: "ajax.php",
		data: data,
		success: function (result) {
			pos = result.indexOf("|");
			
			if (pos) {
				title = result.substr(0, pos);
				contents = result.substr(pos + 1);
				
				$("#dialog").html(contents);
				
				$("#dialog").dialog({
					autoOpen: true,
					title: title,
					height: 700,
					width: 720,
					modal: true,
					resizable: false,
					buttons: {
						"キャンセル": function() {
							$( this ).dialog( "close" );
						},
						"リストに追加": function() {
							var count = 0;
							
							message = "これらのアカウントをグループに追加します：\n";
							
							usersToAdd = new Array();
							
							$(".chkadd:checked").each(function(i) {
								box = $(this).parent().parent();
								
								screen_name = $(".followersAccountName", box).html();
								
								message += screen_name + "\n";
								
								usersToAdd.push(screen_name);
								
								count += 1;
							});
							
							message += "\n合計： " + count + "アカウント\n\n";
							message += "よろしいですか？";
							
							if (count != 0) {
								if (confirm(message)) {
									multipleAccountAdd(usersToAdd);
								}
							} else {
								alert("少なくとも１つのアカウントを選択してください。");
							}
						}
					}
				});
			} else {
				showError(result);
			}
			
			$("#groupEditLoading").hide();
		}
	});
	
	return false;
}

// 複数のアカウントの追加
function multipleAccountAdd(accountsToAdd) {
	var accounts = "";
	
	$.each(accountsToAdd, function(index, value) {
		accounts += "account[" + index + "]=" + encodeURI(value) + "&";
	});
	
	if (accounts != "") {
		accounts = accounts.slice(0, -1);
	} else {
		return;
	}
	
	data = "post_data=true&action=multi_account_add";
	data+= "&" + accounts;
	
	$.ajax({
		type: "POST",
		url: "ajax.php",
		data: data,
		success: function (result) {
			$("#dialog").dialog( "close" );
			loadPage('reload');
		}
	});
}

var usernameCurrentValue;
var usernameChanged;

// ユーザー名フィールドが選択されると、元の値を保存する
function usernameFocus(selected) {
	usernameCurrentValue = $(selected).val();
	usernameChanged = false;
}

// ユーザー名フィールドが変更されると文字の色を変えて、変更ボタンを有効にする
function usernameChange(selected) {
	if ($(selected).val() != usernameCurrentValue && !usernameChanged) {
		$(selected).removeClass("username-unchanged");
		$(selected).removeClass("username-changed");
		
		$(".username-update", $(selected).parent()).removeAttr("disabled");
		
		usernameChanged = true;
	}
}

// ユーザー名を保存する
function usernameUpdate(selected) {
	userBox = $(selected).parent().parent();
	nickname = $("input[name=groupedit-username]", userBox).val();
	user_id = $("input[name=user_id]", userBox).val();

	$(".groupedit-loadingIcon", userBox).html(loading_icon);
	$(".username-update", userBox).attr("disabled", "disabled");
	
	data = "post_data=true&action=nickname_update";
	data+= "&user_id=" + encodeURI(user_id);
	data+= "&nickname=" + encodeURI(nickname);
	
	$.ajax({
		type: "POST",
		url: "ajax.php",
		data: data,
		success: function (result) {
			pos = result.indexOf("|");
			
			if (pos) {
				res = result.substr(0, pos);
				
				// リストに追加できた場合
				if (res == "update") {
					user_id = result.substr(pos + 1);
					
					userBox = $(".user_box input:hidden[value=" + user_id + "]").parent();
					
					$(".groupedit-loadingIcon", userBox).html("");
				}
				else if (res == "remove") {
					pos2 = result.indexOf("|", pos + 1);
					
					user_id = result.substring(pos + 1, pos2);
					name = result.substring(pos2 + 1);
					
					userBox = $(".user_box input:hidden[value=" + user_id + "]").parent();
					nickname = $("input[name=groupedit-username]", userBox).val(name);
					nickname = $("input[name=groupedit-username]", userBox).removeClass("username-changed").addClass("username-unchanged");
					
					
					$(".groupedit-loadingIcon", userBox).html("");
					
				}
				// リストに追加できなかった場合
				else if (res == "error") {
					$(".groupedit-loadingIcon").html("");
					
					errorMsg = result.substr(pos + 1);
					
					showError(errorMsg);
				}
			}
			else {
				$(".groupedit-loadingIcon").html("");
				showError(result);
			}
		}
	});
}

function chkBox(cnt) {
	var chkbox = document.getElementsByName('chkadd')[cnt];
	chkbox.checked = !chkbox.checked;
}

// ツイッターのアカウント情報を調べる
function accountCheck() {
	account = $("#account").val();
	
	if (account) {
		data = "post_data=true&action=account_check";
		data+= "&account=" + encodeURI(account)
		
		$("#data_loading").html(loading_icon);
		$("#description_box").val("読み込み中・・・");
		
		$.ajax({
			type: "POST",
			url: "ajax.php",
			data: data,
			success: function (result) {
				$("#data_loading").html("");
				
				pos = result.indexOf("|");
				
				if (pos) {
					icon = result.substr(0, pos);
					
					$("#twitter_icon").html("<img src=\"" + icon + "\">");
					
					str = result.substr(pos + 1);
				}
				else {
					str = result;
				}
				
				$("#description_box").val(str);
			}
		});
	}
	else {
		$("#description_box").val("アカウント名を入力してください。");
	}
}

function accountAdd() {
	disableEdit();
	
	// ユーザー情報の要素を追加し、ローディングアイコンを表示する
	newBox = $(".template").clone().prependTo('#box');
	
	$(".user_box_icon", newBox).html(loading_icon);
	$(".user_box_desc", newBox).html(loading_icon);
	
	newBox.removeClass("template");
	newBox.addClass("currentBox").show();
	
	// 情報をサーバーに転送する
	account = $("#account").val();
	data = "post_data=true&action=account_add";
	data+= "&account=" + encodeURI(account)
		
	$.ajax({
		type: "POST",
		url: "ajax.php",
		data: data,
		success: function (result) {
			pos = result.indexOf("|");
			
			if (pos) {
				res = result.substr(0, pos);
				
				// リストに追加できた場合
				if (res == "success") {
					// サーバーからの返事を読み込んで、変数に入れる
					pos2 = result.indexOf("|", pos + 1);
					pos3 = result.indexOf("|", pos2 + 1);
					pos4 = result.indexOf("|", pos3 + 1);
					pos5 = result.indexOf("|", pos4 + 1);
					
					message = result.substring(pos + 1, pos2);
					icon_url = result.substring(pos2 + 1, pos3);
					user_id = result.substring(pos3 + 1, pos4);
					twitter_username = result.substring(pos4 + 1, pos5);
					description = result.substring(pos5 + 1);
					
					currentBox = $(".currentBox");
					
					// 読み込んだ値を表示する
					$(".user_box_icon", currentBox).html("<img src=\"" + icon_url + "\">");
					$("input[name=user_id]", currentBox).val(user_id);
					$(".user_screen_name", currentBox).html(twitter_username);
					$(".user_box_desc", currentBox).html(description);
					currentBox.removeClass("currentBox");
					
					showMessage(message);
				}
				// リストに追加できなかった場合
				else if (res == "error") {
					errorMsg = result.substr(pos + 1);
					
					showError(errorMsg);
				}
				else {
					showError(result);
				}
			}
			else {				
				showError("サーバー接続中に問題が起こりました。");
			}
			
			$("#data_loading").html("");
			$("#twitter_icon").html("");
			
			enableEdit();
		}
	});	
}

// フォームを編集できないようにする
function disableEdit() {
	$("#check_button").attr("disabled", "disabled");
	$("#add_button").attr("disabled", "disabled");	
	$("#delete").attr("disabled", "disabled");
	
	$(".user_box :input").each(function(i) {
		$(this).attr("disabled", "disabled");
	});	
}

// フォームを編集できないようにする
function enableEdit() {
	$("#check_button").removeAttr("disabled");
	$("#add_button").removeAttr("disabled");
	$("#delete").removeAttr("disabled");
	
	$(".user_box :input").each(function(i) {
		$(this).removeAttr("disabled");
	});	
}

//　グループからアカウントを削除する
function removeAccounts() {
	var accountsToRemove = "";

	$(".user_box :checked").each(function(i) {
		userBox = $(this).parent().parent();
		user_id = $("input[name=user_id]", userBox).val();
		
		accountsToRemove += "account[" + i + "]=" + encodeURI(user_id) + "&";
	});
	
	// 削除するアカウントが指定されていなかったら、終了する
	if (accountsToRemove == "") {
		showError("削除するユーザーのチェックボックスにチェックしてください。");
		return;
	}
	// 最後のアンパサンドを排除
	else {
		accountsToRemove = accountsToRemove.slice(0, -1);
	}
	
	if (!confirm("本当に選択されたユーザーを削除しますか？")) {
		return;
	}
	
	// 編集不能にする
	disableEdit();
	
	data = "post_data=true&action=account_remove&";
	data+= accountsToRemove;
	
	$.ajax({
		type: "POST",
		url: "ajax.php",
		data: data,
		success: function (result) {
			pos = result.indexOf("|");
			
			if (pos) {
				res = result.substr(0, pos);
				
				// リストに追加できた場合
				if (res == "success") {
					msg = result.substr(pos + 1);
					
					$(".user_box .chk_del:checked").each(function(i) {
						userBox = $(this).parent().parent().parent();
						userBox.hide();
					});					
					
					showMessage(msg);
				}
				// リストに追加できなかった場合
				else if (res == "error") {
					errorMsg = result.substr(pos + 1);
					
					showError(errorMsg);
				}
				else {
					showError(result);
				}
			}
			else {				
				showError("サーバー接続中に問題が起こりました。");
			}
			
			$("#data_loading").html("");
			$("#twitter_icon").html("");
			
			enableEdit();
		}
	});	
}